package org.dandsoft.blackbox.counter;

import org.dandsoft.blackbox.SignalId;

/**
 * @author Vilyuzhanin Denis (Fin)
 */
public class RelationshipCounter {

    /**
     * счетчик ситуации когда функция пассивна и сигнал пассвиен
     */
    private long normalPassive;
    /**
     * счетчик ситуации когда функция активна и сигнал активен
     */
    private long normalActive;
    /**
     * счетчие ситуации когда функция активна а сигнал пассивен
     */
    private long inversionPassive;

    /**
     * счетчик ситуации когда функция пассивна а сигнал активен
     */
    private long inversionActive;


    /**
     * сбросить состояние счетчиков
     */
    public void reset() {
        this.normalActive = 0;
        this.normalPassive = 0;
        this.inversionActive = 0;
        this.inversionPassive = 0;
    }

    /**
     * Увеличить счетчик для ситуации когда функция и сигнал пассвины
     */
    public void incrementNormalPassive() {
        this.normalPassive++;
    }

    /**
     * Увеличить счетчик для ситуации когда функция активна а сигнал пассивен
     */
    public void incrementNormalActive() {
        this.normalActive++;
    }

    /**
     * Увеличить счетчик для ситуации когда функция активна а сигнал пассивен
     */
    public void incrementInversionPassive() {
        this.inversionPassive++;
    }

    /**
     * Увеличить счетчик для ситуации когда функция пассивна а сигнал активен
     */
    public void incrementInversionActive() {
        this.inversionActive++;
    }

    /**
     * Получить счетчик нормальной пассивности
     *
     * @return
     */
    public long getNormalPassive() {
        return normalPassive;
    }

    /**
     * получить счетчие норамальной активности
     *
     * @return
     */
    public long getNormalActive() {
        return normalActive;
    }

    /**
     * получить счетчик инверсной пассивности
     *
     * @return
     */
    public long getInversionPassive() {
        return inversionPassive;
    }

    /**
     * получить счетчик инверсной активности
     *
     * @return
     */
    public long getInversionActive() {
        return inversionActive;
    }

    public long getTotal() {
        return this.normalActive + this.normalPassive + this.inversionActive + this.inversionPassive;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder();
        sb.append("RelationshipCounter");
        sb.append("{normalPassive=").append(normalPassive).append("(").append(normalPassive * 100d / getTotal()).append(")");
        sb.append(", normalActive=").append(normalActive).append("(").append(normalActive * 100d / getTotal()).append(")");
        sb.append(", inversionPassive=").append(inversionPassive).append("(").append(inversionPassive * 100d / getTotal()).append(")");
        sb.append(", inversionActive=").append(inversionActive).append("(").append(inversionActive * 100d / getTotal()).append(")");
        sb.append('}');
        return sb.toString();
    }
}
